Use rust-installer for installation
authorBrian Anderson <banderson@mozilla.com>
Fri, 21 Nov 2014 23:43:29 +0000 (15:43 -0800)
committerBrian Anderson <banderson@mozilla.com>
Thu, 11 Dec 2014 20:18:29 +0000 (12:18 -0800)
This is just a refactoring to put Cargo and Rust on the same installer script.

.gitmodules [new file with mode: 0644]
Makefile.in
README.md
src/etc/install.sh [deleted file]
src/rust-installer [new submodule]

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..b40d613
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "src/rust-installer"]
+       path = src/rust-installer
+       url = https://github.com/rust-lang/rust-installer.git
index c8242541b526d590786cf29eb5198c2a3a86ce26..8ba2b4a6fd4a53ef16a5602ffe766661a9cc670e 100644 (file)
@@ -53,6 +53,7 @@ else
 TARGET_$(1) = $$(TARGET_ROOT)/$(1)
 endif
 DISTDIR_$(1) = $$(TARGET_$(1))/dist
+IMGDIR_$(1) = $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1)-image
 PKGDIR_$(1) = $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1)
 BIN_TARGETS_$(1) := $$(BIN_TARGETS:%=$$(TARGET_$(1))/%$$(X))
 endef
@@ -128,6 +129,8 @@ $(DOC_DIR)/%: src/doc/%
 
 # === Distribution
 
+NON_INSTALLED_PREFIXES := README.md,LICENSE-MIT,LICENSE-APACHE,LICENSE-THIRD-PARTY
+
 define DO_DIST_TARGET
 dist-$(1): $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz
 
@@ -147,34 +150,38 @@ distcheck-$(1): dist-$(1)
                --prefix=$$(TARGET_$(1))/distcheck/install --uninstall
        [ -f $$(TARGET_$(1))/distcheck/install/bin/cargo$(X) ] && exit 1 || exit 0
 
-$$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz: prepare-manifest-$(1)
-       tar -czvf $$@ -C $$(@D) $$(PKG_NAME)-$(1)
-
-prepare-manifest-$(1):
+prepare-image-$(1):
        @[ -f $$(TARGET_$(1))/cargo$$(X) ] || echo 'Please run `make` first'
        @[ -f $$(TARGET_$(1))/cargo$$(X) ]
-       rm -rf $$(PKGDIR_$(1))
-       mkdir -p $$(PKGDIR_$(1))/bin $$(PKGDIR_$(1))/lib/cargo \
-               $$(PKGDIR_$(1))/share/man/man1 \
-               $$(PKGDIR_$(1))/share/doc/cargo \
-               $$(PKGDIR_$(1))/share/zsh/site-functions \
-               $$(PKGDIR_$(1))/etc/bash_completion.d
-       cp $$(TARGET_$(1))/cargo$$(X) $$(PKGDIR_$(1))/bin
-       cp src/etc/cargo.1 $$(PKGDIR_$(1))/share/man/man1
-       cp src/etc/_cargo $$(PKGDIR_$(1))/share/zsh/site-functions/_cargo
-       cp src/etc/cargo.bashcomp.sh $$(PKGDIR_$(1))/etc/bash_completion.d/cargo
-       #cp $$(BIN_TARGETS_$(1)) $$(PKGDIR_$(1))/lib/cargo
+       rm -rf $$(IMGDIR_$(1))
+       mkdir -p $$(IMGDIR_$(1))/bin $$(IMGDIR_$(1))/lib/cargo \
+               $$(IMGDIR_$(1))/share/man/man1 \
+               $$(IMGDIR_$(1))/share/doc/cargo \
+               $$(IMGDIR_$(1))/share/zsh/site-functions \
+               $$(IMGDIR_$(1))/etc/bash_completion.d
+       cp $$(TARGET_$(1))/cargo$$(X) $$(IMGDIR_$(1))/bin
+       cp src/etc/cargo.1 $$(IMGDIR_$(1))/share/man/man1
+       cp src/etc/_cargo $$(IMGDIR_$(1))/share/zsh/site-functions/_cargo
+       cp src/etc/cargo.bashcomp.sh $$(IMGDIR_$(1))/etc/bash_completion.d/cargo
        cp README.md LICENSE-MIT LICENSE-APACHE LICENSE-THIRD-PARTY \
-               $$(PKGDIR_$(1))/share/doc/cargo
-       (cd $$(PKGDIR_$(1)) && find . -type f | sed 's/^\.\///') \
-               > $$(DISTDIR_$(1))/manifest-$$(PKG_NAME).in
-       cp src/etc/install.sh $$(PKGDIR_$(1))
+               $$(IMGDIR_$(1))/share/doc/cargo
        cp README.md LICENSE-MIT LICENSE-APACHE LICENSE-THIRD-PARTY \
-               $$(PKGDIR_$(1))
-       mv $$(DISTDIR_$(1))/manifest-$$(PKG_NAME).in \
-               $$(PKGDIR_$(1))/lib/cargo/manifest.in
-
-install-$(1): prepare-manifest-$(1)
+               $$(IMGDIR_$(1))
+
+$$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz: prepare-image-$(1)
+       sh src/rust-installer/gen-installer.sh \
+               --product-name=Cargo \
+               --verify-bin=cargo \
+               --rel-manifest-dir=cargo \
+               --success-message=Cargo-is-ready-to-roll. \
+               --image-dir=$$(IMGDIR_$(1)) \
+               --work-dir=./$$(DISTDIR_$(1)) \
+               --output-dir=./$$(DISTDIR_$(1)) \
+               --non-installed-prefixes=$$(NON_INSTALLED_PREFIXES) \
+               --package-name=$$(PKG_NAME)-$(1)
+       rm -Rf $$(IMGDIR_$(1))
+
+install-$(1): $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz
        $$(PKGDIR_$(1))/install.sh \
                --prefix="$$(CFG_PREFIX)" \
                --destdir="$$(DESTDIR)" $$(MAYBE_DISABLE_VERIFY)
index 45151e0c3fdab5b333747d71e8114f42a8ed4364..1e328f726abfa1ee22b747cd9950380220a86209 100644 (file)
--- a/README.md
+++ b/README.md
@@ -43,6 +43,7 @@ Cargo can then be compiled like many other standard unix-like projects:
 ```sh
 git clone https://github.com/rust-lang/cargo
 cd cargo
+git submodule init
 ./.travis.install.deps.sh
 ./configure --local-rust-root=`pwd`/rustc
 make
diff --git a/src/etc/install.sh b/src/etc/install.sh
deleted file mode 100755 (executable)
index 33e787d..0000000
+++ /dev/null
@@ -1,466 +0,0 @@
-#!/bin/sh
-# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
-# file at the top-level directory of this distribution and at
-# http://rust-lang.org/COPYRIGHT.
-#
-# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-# option. This file may not be copied, modified, or distributed
-# except according to those terms.
-
-msg() {
-    echo "install: $1"
-}
-
-step_msg() {
-    msg
-    msg "$1"
-    msg
-}
-
-warn() {
-    echo "install: WARNING: $1"
-}
-
-err() {
-    echo "install: error: $1"
-    exit 1
-}
-
-need_ok() {
-    if [ $? -ne 0 ]
-    then
-        err "$1"
-    fi
-}
-
-need_cmd() {
-    if command -v $1 >/dev/null 2>&1
-    then msg "found $1"
-    else err "need $1"
-    fi
-}
-
-putvar() {
-    local T
-    eval T=\$$1
-    eval TLEN=\${#$1}
-    if [ $TLEN -gt 35 ]
-    then
-        printf "install: %-20s := %.35s ...\n" $1 "$T"
-    else
-        printf "install: %-20s := %s %s\n" $1 "$T" "$2"
-    fi
-}
-
-valopt() {
-    VAL_OPTIONS="$VAL_OPTIONS $1"
-
-    local OP=$1
-    local DEFAULT=$2
-    shift
-    shift
-    local DOC="$*"
-    if [ $HELP -eq 0 ]
-    then
-        local UOP=$(echo $OP | tr '[:lower:]' '[:upper:]' | tr '\-' '\_')
-        local V="CFG_${UOP}"
-        eval $V="$DEFAULT"
-        for arg in $CFG_ARGS
-        do
-            if echo "$arg" | grep -q -- "--$OP="
-            then
-                val=$(echo "$arg" | cut -f2 -d=)
-                eval $V=$val
-            fi
-        done
-        putvar $V
-    else
-        if [ -z "$DEFAULT" ]
-        then
-            DEFAULT="<none>"
-        fi
-        OP="${OP}=[${DEFAULT}]"
-        printf "    --%-30s %s\n" "$OP" "$DOC"
-    fi
-}
-
-opt() {
-    BOOL_OPTIONS="$BOOL_OPTIONS $1"
-
-    local OP=$1
-    local DEFAULT=$2
-    shift
-    shift
-    local DOC="$*"
-    local FLAG=""
-
-    if [ $DEFAULT -eq 0 ]
-    then
-        FLAG="enable"
-    else
-        FLAG="disable"
-        DOC="don't $DOC"
-    fi
-
-    if [ $HELP -eq 0 ]
-    then
-        for arg in $CFG_ARGS
-        do
-            if [ "$arg" = "--${FLAG}-${OP}" ]
-            then
-                OP=$(echo $OP | tr 'a-z-' 'A-Z_')
-                FLAG=$(echo $FLAG | tr 'a-z' 'A-Z')
-                local V="CFG_${FLAG}_${OP}"
-                eval $V=1
-                putvar $V
-            fi
-        done
-    else
-        if [ ! -z "$META" ]
-        then
-            OP="$OP=<$META>"
-        fi
-        printf "    --%-30s %s\n" "$FLAG-$OP" "$DOC"
-     fi
-}
-
-flag() {
-    BOOL_OPTIONS="$BOOL_OPTIONS $1"
-
-    local OP=$1
-    shift
-    local DOC="$*"
-
-    if [ $HELP -eq 0 ]
-    then
-        for arg in $CFG_ARGS
-        do
-            if [ "$arg" = "--${OP}" ]
-            then
-                OP=$(echo $OP | tr 'a-z-' 'A-Z_')
-                local V="CFG_${OP}"
-                eval $V=1
-                putvar $V
-            fi
-        done
-    else
-        if [ ! -z "$META" ]
-        then
-            OP="$OP=<$META>"
-        fi
-        printf "    --%-30s %s\n" "$OP" "$DOC"
-     fi
-}
-
-validate_opt () {
-    for arg in $CFG_ARGS
-    do
-        isArgValid=0
-        for option in $BOOL_OPTIONS
-        do
-            if test --disable-$option = $arg
-            then
-                isArgValid=1
-            fi
-            if test --enable-$option = $arg
-            then
-                isArgValid=1
-            fi
-            if test --$option = $arg
-            then
-                isArgValid=1
-            fi
-        done
-        for option in $VAL_OPTIONS
-        do
-            if echo "$arg" | grep -q -- "--$option="
-            then
-                isArgValid=1
-            fi
-        done
-        if [ "$arg" = "--help" ]
-        then
-            echo
-            echo "No more help available for Configure options,"
-            echo "check the Wiki or join our IRC channel"
-            break
-        else
-            if test $isArgValid -eq 0
-            then
-                err "Option '$arg' is not recognized"
-            fi
-        fi
-    done
-}
-
-absolutify() {
-    FILE_PATH="${1}"
-    FILE_PATH_DIRNAME="$(dirname ${FILE_PATH})"
-    FILE_PATH_BASENAME="$(basename ${FILE_PATH})"
-    FILE_ABS_PATH="$(cd ${FILE_PATH_DIRNAME} && pwd)"
-    FILE_PATH="${FILE_ABS_PATH}/${FILE_PATH_BASENAME}"
-    # This is the return value
-    ABSOLUTIFIED="${FILE_PATH}"
-}
-
-msg "looking for install programs"
-need_cmd mkdir
-need_cmd printf
-need_cmd cut
-need_cmd grep
-need_cmd uname
-need_cmd tr
-need_cmd sed
-
-CFG_SRC_DIR="$(cd $(dirname $0) && pwd)"
-CFG_SELF="$0"
-CFG_ARGS="$@"
-
-HELP=0
-if [ "$1" = "--help" ]
-then
-    HELP=1
-    shift
-    echo
-    echo "Usage: $CFG_SELF [options]"
-    echo
-    echo "Options:"
-    echo
-else
-    step_msg "processing $CFG_SELF args"
-fi
-
-# Check for mingw or cygwin in order to special case $CFG_LIBDIR_RELATIVE.
-# This logic is duplicated from configure in order to get the correct libdir
-# for Windows installs.
-CFG_OSTYPE=$(uname -s)
-
-case $CFG_OSTYPE in
-
-    MINGW32*)
-        CFG_OSTYPE=pc-mingw32
-        ;;
-
-    MINGW64*)
-        # msys2, MSYSTEM=MINGW64
-        CFG_OSTYPE=w64-mingw32
-        ;;
-
-# Thad's Cygwin identifers below
-
-#   Vista 32 bit
-    CYGWIN_NT-6.0)
-        CFG_OSTYPE=pc-mingw32
-        ;;
-
-#   Vista 64 bit
-    CYGWIN_NT-6.0-WOW64)
-        CFG_OSTYPE=w64-mingw32
-        ;;
-
-#   Win 7 32 bit
-    CYGWIN_NT-6.1)
-        CFG_OSTYPE=pc-mingw32
-        ;;
-
-#   Win 7 64 bit
-    CYGWIN_NT-6.1-WOW64)
-        CFG_OSTYPE=w64-mingw32
-        ;;
-esac
-
-OPTIONS=""
-BOOL_OPTIONS=""
-VAL_OPTIONS=""
-
-CFG_LIBDIR_RELATIVE=lib
-
-flag uninstall "only uninstall from the installation prefix"
-valopt destdir "" "set installation root"
-opt verify 1 "verify that the installed binaries run correctly"
-valopt prefix "/usr/local" "set installation prefix"
-# NB This isn't quite the same definition as in `configure`.
-# just using 'lib' instead of CFG_LIBDIR_RELATIVE
-valopt libdir "${CFG_DESTDIR}${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
-valopt mandir "${CFG_DESTDIR}${CFG_PREFIX}/share/man" "install man pages in PATH"
-
-
-if [ $HELP -eq 1 ]
-then
-    echo
-    exit 0
-fi
-
-step_msg "validating $CFG_SELF args"
-validate_opt
-
-# OK, let's get installing ...
-
-# Sanity check: can we run the binaries?
-if [ -z "${CFG_DISABLE_VERIFY}" ]
-then
-    # Don't do this if uninstalling. Failure here won't help in any way.
-    if [ -z "${CFG_UNINSTALL}" ]
-    then
-        msg "verifying platform can run binaries"
-        "${CFG_SRC_DIR}/bin/cargo" -V 2> /dev/null
-        if [ $? -ne 0 ]
-        then
-            err "can't execute cargo binary on this platform"
-        fi
-    fi
-fi
-
-# Sanity check: can we can write to the destination?
-msg "verifying destination is writable"
-umask 022 && mkdir -p "${CFG_LIBDIR}"
-need_ok "can't write to destination. consider \`sudo\`."
-touch "${CFG_LIBDIR}/rust-install-probe" > /dev/null
-if [ $? -ne 0 ]
-then
-    err "can't write to destination. consider \`sudo\`."
-fi
-rm -f "${CFG_LIBDIR}/rust-install-probe"
-need_ok "failed to remove install probe"
-
-# Sanity check: don't install to the directory containing the installer.
-# That would surely cause chaos.
-msg "verifying destination is not the same as source"
-INSTALLER_DIR="$(cd $(dirname $0) && pwd)"
-PREFIX_DIR="$(cd ${CFG_PREFIX} && pwd)"
-if [ "${INSTALLER_DIR}" = "${PREFIX_DIR}" ]
-then
-    err "can't install to same directory as installer"
-fi
-
-# Using an absolute path to libdir in a few places so that the status
-# messages are consistently using absolute paths.
-absolutify "${CFG_LIBDIR}"
-ABS_LIBDIR="${ABSOLUTIFIED}"
-
-# The file name of the manifest we're going to create during install
-INSTALLED_MANIFEST="${ABS_LIBDIR}/cargo/manifest"
-
-# First, uninstall from the installation prefix.
-# Errors are warnings - try to rm everything in the manifest even if some fail.
-if [ -f "${INSTALLED_MANIFEST}" ]
-then
-    # Iterate through installed manifest and remove files
-    while read p; do
-        # The installed manifest contains absolute paths
-        msg "removing $p"
-        if [ -f "$p" ]
-        then
-            rm -f "$p"
-            if [ $? -ne 0 ]
-            then
-                warn "failed to remove $p"
-            fi
-        else
-            warn "supposedly installed file $p does not exist!"
-        fi
-    done < "${INSTALLED_MANIFEST}"
-
-    # If we fail to remove cargo below, then the installed manifest will
-    # still be full; the installed manifest needs to be empty before install.
-    msg "removing ${INSTALLED_MANIFEST}"
-    rm -f "${INSTALLED_MANIFEST}"
-    # For the above reason, this is a hard error
-    need_ok "failed to remove installed manifest"
-
-    # Remove 'rustlib' directory
-    msg "removing ${ABS_LIBDIR}/cargo"
-    rm -Rf "${ABS_LIBDIR}/cargo"
-    if [ $? -ne 0 ]
-    then
-        warn "failed to remove cargo"
-    fi
-else
-    # There's no manifest. If we were asked to uninstall, then that's a problem.
-    if [ -n "${CFG_UNINSTALL}" ]
-    then
-        err "unable to find installation manifest at ${CFG_LIBDIR}/cargo"
-    fi
-fi
-
-# If we're only uninstalling then exit
-if [ -n "${CFG_UNINSTALL}" ]
-then
-    echo
-    echo "    Cargo is uninstalled."
-    echo
-    exit 0
-fi
-
-# Create the installed manifest, which we will fill in with absolute file paths
-mkdir -p "${CFG_LIBDIR}/cargo"
-need_ok "failed to create cargo"
-touch "${INSTALLED_MANIFEST}"
-need_ok "failed to create installed manifest"
-
-# Now install, iterate through the new manifest and copy files
-while read p; do
-
-    # Decide the destination of the file
-    FILE_INSTALL_PATH="${CFG_DESTDIR}${CFG_PREFIX}/$p"
-
-    if echo "$p" | grep "^lib/" > /dev/null
-    then
-        pp=`echo $p | sed 's/^lib\///'`
-        FILE_INSTALL_PATH="${CFG_LIBDIR}/$pp"
-    fi
-
-    if echo "$p" | grep "^share/man/" > /dev/null
-    then
-        pp=`echo $p | sed 's/^share\/man\///'`
-        FILE_INSTALL_PATH="${CFG_MANDIR}/$pp"
-    fi
-
-    # Make sure there's a directory for it
-    umask 022 && mkdir -p "$(dirname ${FILE_INSTALL_PATH})"
-    need_ok "directory creation failed"
-
-    # Make the path absolute so we can uninstall it later without
-    # starting from the installation cwd
-    absolutify "${FILE_INSTALL_PATH}"
-    FILE_INSTALL_PATH="${ABSOLUTIFIED}"
-
-    # Install the file
-    msg "${FILE_INSTALL_PATH}"
-    if echo "$p" | grep "^bin/\\|/cargo-" > /dev/null
-    then
-        install -m755 "${CFG_SRC_DIR}/$p" "${FILE_INSTALL_PATH}"
-    else
-        install -m644 "${CFG_SRC_DIR}/$p" "${FILE_INSTALL_PATH}"
-    fi
-    need_ok "file creation failed"
-
-    # Update the manifest
-    echo "${FILE_INSTALL_PATH}" >> "${INSTALLED_MANIFEST}"
-    need_ok "failed to update manifest"
-
-# The manifest lists all files to install
-done < "${CFG_SRC_DIR}/${CFG_LIBDIR_RELATIVE}/cargo/manifest.in"
-
-# Sanity check: can we run the installed binaries?
-if [ -z "${CFG_DISABLE_VERIFY}" ]
-then
-    msg "verifying installed binaries are executable"
-    "${CFG_DESTDIR}${CFG_PREFIX}/bin/cargo" -V 2> /dev/null
-    if [ $? -ne 0 ]
-    then
-        ERR="can't execute installed rustc binary. "
-        ERR="${ERR}installation may be broken. "
-        ERR="${ERR}if this is expected then rerun install.sh with \`--disable-verify\` "
-        ERR="${ERR}or \`make install\` with \`--disable-verify-install\`"
-        err "${ERR}"
-    fi
-fi
-
-echo
-echo "    Cargo is ready to roll."
-echo
-
-
diff --git a/src/rust-installer b/src/rust-installer
new file mode 160000 (submodule)
index 0000000..aed7347
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit aed73472416064642911af790b25d57c9390b6c7